package com.itheima.mapper;

import com.itheima.pojo.Emp;
import com.itheima.pojo.EmpQueryParam;
import org.apache.ibatis.annotations.*;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

@Mapper
public interface EmpMapper {

// -----------------------原始代码----------------------
//    /*
//    * 查询所有的员工 及其对应的部门名称*/
//    @Select("select emp.*,dept.name as deptName from emp left join dept on emp.dept_id = dept.id limit #{start},#{pageSize} ")
//    public List<Emp> list(Integer start, Integer pageSize);
//
//
//    /*查询总记录数*/
//    @Select("select count(*) from emp left join dept on emp.dept_id = dept.id ")
//    public Long count();



    // ----------------------PageHelper分页插件功能代码实现---------------

    /*
    * 查询所有的员工 及其对应的部门名称*/
//   @Select("select emp.*,dept.name as deptName from emp left join dept on emp.dept_id = dept.id ")

    // 由于sql语句复杂，将sql语句配置在xml映射文件中
   public List<Emp> list(EmpQueryParam empQueryParam);


   /*
   * 新增员工数据*

   我们在保存工作经历信息的时候，需要记录是哪位员工的工作经历，
   * 所以，保存完员工信息之后，需要获取员工的ID
    */
    @Options(useGeneratedKeys = true,keyProperty = "id")
    @Insert("insert into emp(username, name, gender, phone, job, salary, image, entry_date, dept_id, create_time, update_time) " +
            "values (#{username},#{name},#{gender},#{phone},#{job},#{salary},#{image},#{entryDate},#{deptId},#{createTime},#{updateTime})")
    void insert(Emp emp);


    /*
    * 批量删除员工信息*/
    void deleteByIds(List<Integer> ids);


    /*
    * 根据ID查询员工的详细信息*/
    Emp getById(Integer id);


    /*
    * 更新员工基本信息*/
    void updateById(Emp emp);


    /*
    * 统计各个职位的员工人数*/
    @MapKey("pos")
    List<Map<String, Object>> countEmpJobData();


    /*
    * 统计员工性别信息*/
    @MapKey("name")
    List<Map> countEmpGenderData();


 /**
  * 查询全部员工
  */
 @Select("select id, username, password, name, gender, phone, job, salary, image, entry_date, dept_id, create_time, update_time from emp")
 List<Emp> findAll();


 /**
  * 根据用户名和密码查询员工信息
  */
 @Select("select * from emp where username = #{username} and password = #{password}")
 Emp getUsernameAndPassword(Emp emp);
}